package org.example.sword2offer.primary;

import java.util.*;

/**
 * @author: lynn
 * @Descript: 把数组排成最小的数
 * 输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
 * 例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为321323。
 * @date: 2021/3/15 20:03
 * @version: 1.0
 */
public class Q32_PrintMinNumber {


    public static void main(String[] args) {

        int[] a={1,3,23};
        System.out.println(getMin(a));

    }

    //如果3和32相连的结果大于32和3相连的结果，那么视作3比32大，最后我们需要按照按照这种策略将数组进行升序排序
    public static String getMin(int[] numbers){
        List<Integer> list=new ArrayList<>();
        for (int i = 0; i <numbers.length; i++) {
                list.add(numbers[i]);
        }
        //数组转list
        Collections.sort(list, (o1, o2)->{
                        String s1=o1.toString()+o2.toString();
                        String s2=o2.toString()+o1.toString();
                        return Integer.valueOf(s1)-Integer.valueOf(s2);
        });
        StringBuilder sb=new StringBuilder();
        for(Integer i:list){
            sb.append(i);
        }
        return sb.toString();
    }

    /*public static class arrayComparator implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            String s1=o1.toString()+o2.toString();
            String s2=o2.toString()+o1.toString();
            return Integer.valueOf(s1)-Integer.valueOf(s2);
        }
    }*/

}
